package com.corpgovernment.common.handler;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * @Author: majl
 * @DateTime: 2019-5-24
 * @FileName: ICacheHandler
 * @Description
 */
public interface ICacheHandler {

    Object getValue(String key);
    void setValue(String key, Object value);
    void setValue(String key, Object value, long timeoutSecond);
    Long increment(String key);

    List getList(String key);
    void setList(String key, List list);
    void setList(String key, List list, long timeoutSecond);

    Map getHash(String key);
    Object getHashValue(String key, Object hashKey);
    void setHash(String key, Map map);
    void setHash(String key, Map map, long timeoutSecond);
    void setHashValue(String key, Object hashKey, Object hashValue);
    Set keySet(String key);

    boolean delete(String key);

    boolean deleteByPrefix(String prefix);

    /**
     * 设置超时时间 单位：秒
     * @param key
     * @param timeoutSecond
     * @return
     */
    boolean setExpire(String key , long timeoutSecond);

    /**
     * 大value会把value拆分存储 取数据的相应方式也要用getBigValue
     * @param key
     * @param value
     */
    void setBigValue(String key,Object value);

    void setBigValue(String key,Object value, long timeoutSecond);

    /**
     * 获取大value对象
     * @param key
     * @param clazz
     * @param <T>
     * @return
     */
    <T> T getBigValue(String key,Class clazz);

    /**
     * 不存在则设置值
     */
    Boolean setNx(String key, Object value, long timeoutSecond);

    /**
     * 获取hashMap中的key
     */
    Set<Object> getHashKeys(String key);

    /**
     * 删除hashMap中的key
     */
    Object deleteHash(String key, Object ... hashKeys);

    /**
     * 重新设置Redis Hash，并移除不存在的键
     * @param key
     * @param hashMap
     */
    void resetHash(String key, Map hashMap);

    Boolean hasKey(String key);

    /**
     * 获取set所有成员
     */
    Set<Object> sMembers(String key);

    List<Object> multiGet(String key, List<String> keys);

    /**
     * 是否是set成员
     */
    Boolean isMember(String key, Object value);

    /**
     * 给set添加成员
     */
    Long sAdd(String key, Object ... values);

    /**
     * 给set删除成员
     */
    Long sRemove(String key, Object ... values);

    /**
     * set成员个数
     */
    Long sSize(String key);

    /**
     * get hashValue
     */
    void hset(Object o, String key, String hashKey);

    Object hget(String key,String hashKey);
}
